//express 默认的帮我们做了一些设置
var createError = require('http-errors');
var express = require('express');
var path = require('path');
var cookieParser = require('cookie-parser');
var logger = require('morgan');
var favicon = require('serve-favicon');

//引入两个路由中间件
//返回回来的中间件是给后面来使用的
var indexRouter = require('./routes/index');
var usersRouter = require('./routes/users');

var app = express();

// view engine setup
//模板引擎设置
//path.join将两个目录合并到一块,_dirname其实是app.js所在的目录，把两个串联到一起，加入一个'/'
//注意_dirname是获取当前你所访问的文件所在的系统绝对路径
app.set('views', path.join(__dirname, 'views'));
//设置引擎默认为ejs
app.set('view engine', 'ejs');

//uncomment after placing your favicon in /public
// app.use(favicon(path.join(_dirname,'public','favicon.ico')));
app.use(logger('dev'));//显示request日志
//后面两个非常重要
//用于处理提交的数据，只能处理以下两种情况的表单：
// 1.form表单提交的，传入表单默认的'Content_Type':'application/x-www-form-urlencoded'；
app.use(express.json());
// 2.通过浏览器传过来的json字符串
app.use(express.urlencoded({ extended: false }));
//前端往后端送数据，
// 那么通过表单的话，传入一个表单的url和对象，其实就是写个form，传入一些input，直接submit就行了
//如果通过ajax往后端送数据的话，假如使用jQuery，data字段你可能会写一个对象，那么这个就会出问题
//因为传过来是个对象，而jQuery默认的Content-Type是application/x-www-form-urlencoded
//如果你给后端送json字符串的话，需要对data做一个json字符串化的处理，必须调一下json.stringfy，把对象转换为一个json字符串
//同时，我们要给后端请求数据的时候，将Content-Type类型写成application/json

//Content-Type是非常重要的一个东西，它是我们跟后端握手的非常重要的依据
//它的值我们一般情况下有4个：
//application/x-www-form-urlencoded ：常见的form提交，也是默认值
// application/json：JSON数据格式
//multipart/form-data：提交上传文件时候的一个数据表单格式
//text/xml ：  提交XML格式
app.use(cookieParser());//cookie操作
//静态页面目录设置，浏览器访问的根目录被达到了这个目录下
app.use(express.static(path.join(__dirname, 'public')));

//通过use可以注册一个中间件
app.use('/', indexRouter);
//users访问的是usersRouter路由
app.use('/users', usersRouter);

// catch 404 and forward to error handler
//404请求
app.use(function(req, res, next) {
  next(createError(404));
});

// error handler
app.use(function(err, req, res, next) {
  // set locals, only providing error in development
  res.locals.message = err.message;
  res.locals.error = req.app.get('env') === 'development' ? err : {};

  // render the error page
  res.status(err.status || 500);
  res.render('error');
});

module.exports = app;
